---
title: Migrate from Classic Updates
description: A guide to help migrate from Classic Updates to EAS Update.
---

import { Terminal } from '~/ui/components/Snippet';
import { Step } from '~/ui/components/Step';
import { A } from '~/ui/components/Text';

> **warning** SDK 49 was the last version to support Classic Updates. To continue using the deprecated `expo publish` command, set [`updates.useClassicUpdates`](/versions/latest/config/app/#useclassicupdates) in your app config.

EAS Update is the next generation of Expo's updates service. If you're using Classic Updates, this guide will help you upgrade to EAS Update.

## Prerequisites

EAS Update requires the following versions or greater:

- Expo SDK >= 45.0.0
- Expo CLI >= 5.3.0
- EAS CLI >= 0.50.0
- expo-updates >= 0.13.0

## Install EAS CLI

<Step label="1">
Install EAS CLI:

<Terminal cmd={['$ npm install --global eas-cli']} />

</Step>

<Step label="2">
Then, log in with your expo account:

<Terminal cmd={['$ eas login']} />

</Step>

## Configure your project

You'll need to make the following changes to your project:

<Step label="1">
Initialize your project with EAS Update:

<Terminal cmd={['$ eas update:configure']} />

After this command, you should have two new fields in your app config at `expo.updates.url` and `expo.runtimeVersion`.

</Step>

<Step label="2">

To ensure that updates are compatible with the underlying native code inside a build, EAS Update uses a new field named `runtimeVersion` that replaces the `sdkVersion` field in your project's app config. Remove the `expo.sdkVersion` property from your app config.

</Step>

<Step label="3">

To allow updates to apply to builds built with EAS, update your EAS Build profiles in **eas.json** to include `channel` properties. These channels replace `releaseChannel` properties. We find it convenient to name the `channel` after the profile's name. For instance, the `preview` profile has a `channel` named `"preview"` and the `production` profile has a `channel` named `"production"`.

```json eas.json
{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal",
      "channel": "preview"
    },
    "production": {
      "channel": "production"
    }
  }
}
```

</Step>

<Step label="4">

**Optional**: If your project is a bare React Native project, see [Use EAS Update in an existing project](/eas-update/getting-started/) for the extra configuration you may need.

</Step>

## Create new builds

The changes above affect the native code layer inside builds, which means you'll need to make new builds to start sending updates. Once your builds are complete, you'll be ready to publish an update.

## Publish an update

After making a change to your project locally, you're ready to publish an update, run:

<Terminal
  cmd={[
    '$ eas update --channel [channel-name] --message [message]',
    '',
    '# Example',
    '$ eas update --channel production --message "Fixes typo"',
  ]}
  cmdCopy="eas update --channel [channel-name] --message [message]"
/>

Once published, you can see the update in the [EAS dashboard](https://expo.dev/accounts/[account]/projects/[project]/updates).

## Additional migration steps

- Replace instances of `expo publish` with `eas update` in scripts. You can view all the options for publishing with `eas update --help`.
- If you have any code that references `Updates.releaseChannel` from the `expo-updates` library, replace them with `Updates.channel`.
- Remove any code that references `Constants.manifest`. That will now always return `null`. You can access most properties you'll need with `Constants.expoConfig` from the `expo-constants` library.

## Learn more

The steps described above allow you to use a similar flow to Classic Updates. However, EAS Update is more flexible and has more features. It can be used to create more stable release flows. Learn [how EAS Update works](/eas-update/how-it-works) and how you can craft a more stable [deployment process](/eas-update/deployment-patterns) for your project and your team.

If you experience issues with migrating, check out our [debugging guide](/eas-update/debug). If you have feedback, join us on <A href="https://chat.expo.dev/" shouldLeakReferrer>Discord</A> in the #update channel.
